A computer system may employ various hardware devices for different functions, such as data input and output, printing, display, etc. Each hardware device in the computer system is typically operated through its associated device driver, which is in most cases supplied by the vendor of the hardware device and loaded as part of the operating system. The device driver allows the computer operating system and applications to communicate with the hardware device and control its operations. The device driver is device-specific in that it is written to handle the particular behavior of the device. In this regard, device drivers often rely on libraries provided by the hardware vendors to communicate with their associated devices. On the other hand, the device driver also has to be written according to specifications and requirements of the operating system with which the driver is to be used.
Although the quality of the device driver for a hardware device is critical to the proper operation of the device, many hardware vendors find it difficult to put in the needed time and resources to adequately develop a device driver. This problem is exacerbated by the frequent need to create device drivers for new hardware device models or to rewrite device drivers for use with new versions of operating systems. Also, to support a new driver, the hardware vendor may have to develop a new library. The need to code new device drivers and libraries can be a significant burden on the hardware vendors.
The task of developing device drivers and libraries is also shared by developers of operating systems. Before a device driver can be incorporated into an operating system, the operating system developer often has to test it to identify errors in the driver and its libraries. Fixes to a driver library have to be done by the hardware vendor and then merged into the current version of the library. To effectively test a driver and its libraries, the operating system developer has to have a good understanding of the libraries, such as what each library does and which device models it supports. This requirement puts a significant burden on the operating system developer. Thus, the difficulties in creating device drivers concern not only hardware vendors but also operating system developers.